perm filename HHT3.FAI[CMS,LCS] blob sn#380241 filedate 1978-09-13 generic text, type T, neo UTF8
00100	; LOAD THIS FILE AND SAVE AS  "HHT.DMP"
00200	; THEN EX CON11.FAI[CMS,LCS] TO CONVERT TO PDP-11 LOADER FORMAT
00300	; FINAL FILE IS "LOAD11.HHT"
00400	
00500	;		BIT RATE GEN CODES
00600	;	0 = 0			10 = 9600
00700	;	1 = 19.2K		11 = 4800
00800	;	2 = 50			12 = 1800
00900	;	3 = 75			13 = 1200
01000	;	4 = 134.5		14 = 2400
01100	;	5 = 200			15 = 300
01200	;	6 = 600			16 = 150
01300	;	7 = 2400		17 = 110
01400	
01500		TITLE HHT
01600		.INSERT	ASMBL.FAI[CMS,LCS]
01700	
01800		CPL ← = 28	;CHRS PER LINE
01900		NCHRS ← = 112	;CHRS PER SCREEN
02000		
02100	; Zpage ram
02150	   LOC 0
02200		COL:	0
02300		CUR:	0
02400			0
02500		WINDOW:	0
02600			0
02700	
02800		TMP:	0
02900			0
03000		LINL:	0
03100		CHRL:	0
03200		BRT:	0
03300	
03400		NWAIT:	0
03500		UPFLG:	0
03600		CURVIS:	0
03700		DIS:	0
03800			0
03900		SHIFT:	0
04000		WINK:	0
04100	
04400		LOC 600
04500	REBUF0:	BLOCK = 128	;REFRESH BUFFER
04600	;	LOC 1000
04700	REBUF1:	BLOCK = 128
04800	;	LOC 1200
04900	REBUF2:	BLOCK = 128
05000	;	LOC 1400
05100	REBUF3:	BLOCK = 128
05200	;	LOC 1600
05300	REBUF4:	BLOCK = 128
05400		BLOCK = 1024
05500	
05600		LOC 4000
05700	ABUF:	0		;ASCII CHR BUF
     

00100	; Reset
00200		LOC 174000	;LOC 174000
00300		RSTA:	LDAI	377	;TURN OFF COLS
00400			STA	COLREG
00500			CLD		;CLEAR DECIMAL MODE
00600			LDXI	177	;STACK DEPTH
00700			TXS		;SETUP STACK
00800			LDAI	0	;SET UP BRIGHTNESS
00900			STAZ	BRT
01000	
01100	; SETUP AND CLEAR SCREEN
01200		;CLEAR ABUF, SETUP CURSOR AND WINDOW
01300		SD ← 10		;START OF ABUF
01400		ED ← 14		;END OF ABUF
01500			JSR	HOME	;SETUP CURSOR
01600			LDAI	=16	;NUMBER OF LINES IN MEM
01700			STAZ	TMP
01800		CLRM:	JSR	LF	;<lf> THEN CLEAR LINE *16
01900			DECZ	TMP
02000			BNE	CLRM
02100	; INIT I/O
02200	  ;INIT RS232
02300		SIODEF ← 225	;UART CONTROL WORD
02400		ACIAC ← 77776	;UART CONTROL REG ADDRESS
02500		ACIAD ← 77777	;UART DATA REG ADDRESS
02600			LDAI	3	;RESET ACIA
02700			STA	ACIAC
02800			LDAI	SIODEF	;SETUP DEFAULT I/O CONTROL
02900			STA	ACIAC
03000	  ;INIT KB SCANER
03100		KBD ← 23776	;KEYBOARD DATA REGISTER ADDRESS
03200		KBC ← 23777	;KEYBOARD CONTROL REGISTER ADDRESS
03300			LDAI	2	;KB DPY MODE SET
03400			STA	KBC
03500			LDAI	60	;KB CLK DIV
03600			STA	KBC
03700	
03800			LDAI	302	;CLEAR KB INTERUPT
03900			STA	KBC
04000	
04100			LDAI	100	;READ KB
04200			STA	KBC
04300	
04400			CLI		;ENABLE INTERUPTS
     

00100	; REFRESH LOOP
00200		NCHRS ← =112	;NUMBER OF CHRS ON SCREEN
00300		DPYSR ← 27777	;DISPLAY SHIFT REGISTER ADDRESS
00400	
00500			LDXI	NCHRS-1
00600		RELOOP:	LDAI	376
00700			STAZ	COL	;SETUP COL BIT 1
00800					;				       CY
00900		SLOOP0:	LDAX	REBUF0	;PUT FIRST COL IN SHIFT			4
01000			STA	DPYSR	;REGISTER STARTING WITH LAST CHR	4
01100			DEX		;					2
01200			BPL	SLOOP0	;				       _3_
01300			JSR	NXCOL	;TURN ON COL AND WAIT		    5+(13*112)=1461
01400	
01500		SLOOP1:	LDAX	REBUF1	;SECOND
01600			STA	DPYSR
01700			DEX
01800			BPL	SLOOP1
01900			JSR	NXCOL
02000	
02100		SLOOP2:	LDAX	REBUF2	;THIRD
02200			STA	DPYSR
02300			DEX
02400			BPL	SLOOP2
02500			JSR	NXCOL
02600	
02700		SLOOP3:	LDAX	REBUF3	;FORTH
02800			STA	DPYSR
02900			DEX
03000			BPL	SLOOP3
03100			JSR	NXCOL
03200	
03300		SLOOP4:	LDAX	REBUF4	;FIFTH
03400			STA	DPYSR
03500			DEX
03600			BPL	SLOOP4
03700			JSR	NXCOL
03800	
03900			JMP	RELOOP
     

00100	; WAIT LOOP AND SETUP
00200		COLREG ← 33777	;COL ENABLE REGISTER ADDRESS
00300		CPL ← = 28	;NUMBER OF CHRS PER LINE
00400		SPEED ← = 36	;SPEED OF SHIFT RIGHT IN ms * 2
00500	; TURN ON COL					       CY
00600		NXCOL:	LDAZ	COL	;			3
00700			STA	COLREG	;TURN ON COL		4
00800			SEC		;			2
00900			ROLZ	COL	;SHIFT FOR NEXT COL	5
01000	
01100	; WAIT(BRIGHTNESS)		Tcy = 1488 = .9916 ms
01200			LDXZ	BRT	;			3
01300			LDAX	BTBL	;			4
01400			STAZ	NWAIT	;			4
01500		WAIT1:	DECZ	NWAIT	;			5
01600			BNE	WAIT1	;			3
01700	
01800			INCZ	WINK	;			5
01900			BEQ	BLINK	;TIME TO BLINK		2
02000		GOWAIT:	LDAX	OFFTBL	;			4
02100			STAZ	NWAIT	;SETUP OFF WAIT		4
02200			LDXI	NCHRS-1	;			2
02300	; TURN OFF COL
02400			LDAI	377	;			2
02500			STA	COLREG	;TURN OFF COL		4
02600			LDAZ	UPFLG	;CK IF UPDATE FLAG SET	3
02700			BNE	CKSHFT	;			2
02800	
02900	; WAIT(¬BRIGHTNESS)
03000		WAIT2:	DECZ	NWAIT	;			5
03100			BNE	WAIT2	;			3
03200	
03300			RTS		;			6
03400	; BRIGHTNESS TABLES
03500		BTBL:	=80  ↔ =200
03600		OFFTBL:	=120 ↔ 1
03700	; BLINK CURSOR
03800		BLINK:	JSR	SHOCUR	;XOR CURSOR INTO REBUF
03900			JMP	GOWAIT
04000	; CHECK FOR RIGHT SHIFT
04100		CKSHFT:	BPL	UPDATE	;CK RIGHT SHIFT FLAG
04200			DECZ	SHIFT	;SEE IF TIME TO SHIFT
04300			BNE	WAIT2	;CK UPDATE?
04400			LDAI	SPEED
04500			STAZ	SHIFT
04600			SEI		;MASK OUT INTERUPTS
04700			LDYZ	WINDOW
04800			INY
04900			TYA
05000			ANDI	77
05100			CMPI	45	;CHECK IF AT LEFT EDGE
05200			BCS	EDGE
05300			STYZ	WINDOW
05400			JSR	CKVIS	;SETUP Y INDEX AND DISTANCE
05500			CLI		;ENABLE INTERUPTS
05600			JMP	UPDPY
05700	
05800		EDGE:	LDAZ	UPFLG
05900			ANDI	177	;TURN OFF RIGHT SHIFT FLAG
06000			STAZ	UPFLG
06100			CLI		;ENABLE INTERUPTS
06200			BEQ	WAIT2	;FALL THROUGH TO UPDATE
     

00100	; UPDATE SCREEN
00200		UPDATE:	LDAI	0	;RESET UDATE FLAG
00300			STAZ	UPFLG
00400		UPDPY:	LDAZ	WINDOW	;COPY WINDOW INTO TEMP
00500			STAZ	TMP
00600			LDAZ	WINDOW+1
00700			STAZ	TMP+1
00800			LDAI	4	;NUMBER OF LINES PER SCREEN
00900			STAZ	LINL
01000			LDYI	0
01100	
01200		LLOOP:	LDAI	CPL	;28 CHRS TO GO
01300			STAZ	CHRL
01400	
01500		ULOOP:	LDXI	0
01600			LDAIX	TMP	;WRITE CHRGEN BITS INTO REBUF
01700			JSR	WCHR
01800			INY
01900			INCZ	TMP
02000			BNE	CKCHRL
02100			INCZ	TMP+1
02200			LDAZ	TMP+1
02300			CMPI	ED
02400			BNE	CKCHRL
02500			LDAI	SD
02600			STAZ	TMP+1
02700	
02800		CKCHRL:	DECZ	CHRL
02900			BNE	ULOOP	;MORE CHRS LEFT ON LINE
03000	
03100			LDAZ	TMP
03200			CLC
03300			ADCI	44	;100-CPL = NEXT LINE
03400			STAZ	TMP
03500			BCC	NOOF
03600			INCZ	TMP+1
03700			LDAZ	TMP+1
03800			CMPI	ED
03900			BNE	NOOF
04000			LDAI	SD
04100			STAZ	TMP+1
04200	
04300		NOOF:	DECZ	LINL
04400			BNE	LLOOP	;DO NEXT LINE
04500	
04600			JSR	SHOCUR	;SHOW CURSOR IF ON SCREEN
04700			LDXI	NCHRS-1	;SETUP X
04800			RTS
     

00100	; KB INTERUPT ROUTINE
00200		KBINT:	PHA		;SAVE REGS
00300			TXA
00400			PHA
00500	
00600			LDX	KBD	;GET CHR FROM KB
00700	
00800			LDAI	302	;CLEAR KB INTERUPT
00900			STA	KBC
01000			CLI		;CLEAR INTERUPT MASK
01100	
01200		OWAIT:	LDA	ACIAC
01300			ANDI	2	;CHECK IF FULL
01400			BEQ	OWAIT
01500			LDAX	CHRTBL	;CONVERT KB TO ASCCI
01600			STA	ACIAD	;OUTPUT IT
01700	
01800			PLA		;RESTORE REGS
01900			TAX
02000			PLA
02100			RTI		;RETURN
02200	;ERASE CURSOR
02300		CKERA:	LDYZ	CURVIS
02400			BMI	NOS	;CK IF ON SCREEN
02500			LDXI	0
02600			LDAIX	CUR
02700	; GEN CHR
02800		WCHR:	TAX		;X ← ASCII CHR
02900			LDAX	CGEN0	;FILL REBUF COLS 0-4
03000			STAY	REBUF0
03100			LDAX	CGEN1
03200			STAY	REBUF1
03300			LDAX	CGEN2
03400			STAY	REBUF2
03500			LDAX	CGEN3
03600			STAY	REBUF3
03700			LDAX	CGEN4
03800			STAY	REBUF4
03900		NOS:	RTS
04000	; <bspace>
04100		BS:	JSR	CKERA	;ERASE OLD CURSOR IF ON SCREEN
04200			LDAZ	CUR	;DECERMENT CURSOR
04300			BNE	NOBACK
04400			DECZ	CUR+1
04500			LDAZ	CUR+1
04600			CMPI	SD-1	;CK IF BEFORE BEGINING
04700			BNE	NOBACK
04800			LDAI	ED-1	;WRAP AROUND
04900			STAZ	CUR+1
05000		NOBACK:	DECZ	CUR
05100			JMP	CKCUR	;SHOW CURSOR IF ON SCREEN
05200	; CURSOR OFF LINE
05300		OFFLIN:	DECZ	CUR	;FIX CUR FOR <cr>
05400			JSR	CR	;<cr>
05500			JMP	RLF	;<lf>, CK SCROLL AND UPDATE
     

00100	; RS232 INTERUPT ROUTINE
00200		RSINT:	PHA		;SAVE REGS
00300			TXA
00400			PHA
00500			TYA
00600			PHA
00700	
00800			LDA	ACIAD	;GET CHR FROM ACIA
00900			ANDI	177	;7 BITS
01000	
01100			CMPI	30	;CONTROL CODES
01200			BCC	SCNTRL
01300			CMPI	177	;<bspace>
01400			BEQ	BS
01500	
01600		PCHR:	LDXI	0
01700			STAIX	CUR	;STORE IN ABUF
01800			LDYZ	CURVIS	;CK IF IN WINDOW
01900			BMI	INCUR
02000			JSR	WCHR	;WRITE CHR IN REBUF
02100	
02200		INCUR:	INCZ	CUR	;INCREMENT CURSOR
02300			LDAZ	CUR
02400			ANDI	77
02500			BEQ	OFFLIN	;BRANCH IF OFF END OF LINE
02600	
02700		CKCUR:	JSR	CKVIS	;SHOW CURSOR IF ON SCREEN
02800	
02900			JSR	SHOCUR	;XOR CURSOR INTO REBUF
03000	
03100		RSRTRN:	PLA		;RESTORE REGS
03200			TAY
03300			PLA
03400			TAX
03500			PLA
03600			RTI		;RETURN
     

00100	; FOLLOW CURSOR
00200		FOLLOW:	LDXZ	WINDOW
00300			LDYZ	WINDOW+1
00400			LDAZ	CUR
00500			ANDI	300	;SET CURSOR AT BOTTOM RIGHT OF WINDOW
00600			SEC
00700			SBCI	300
00800			STAZ	WINDOW
00900			LDAZ	CUR+1
01000			SBCI	0
01100			CMPI	SD-1
01200			BNE	NOTB4
01300			LDAI	ED-1
01400		NOTB4:	STAZ	WINDOW+1
01500	
01600			LDAZ	CUR	;SET CURSOR AT RIGHT
01700			ANDI	77
01800			CMPI	CPL
01900			BCC	OK
02000			SBCI	CPL-1
02100			ORAZ	WINDOW
02200			STAZ	WINDOW
02300	
02400		OK:	CPXZ	WINDOW	;UPDATE SCREEN IF DIFFERENT
02500			BNE	SETFLG
02600			CPYZ	WINDOW+1
02700			BNE	SETFLG
02800			BEQ	RSRTRN
     

00100	; RS232 CONTROL
00200		SCNTRL:	CMPI	26	;CUR ← RIGHT BOTTOM
00300			BEQ	FOLLOW
00400			CMPI	12	;<lf>
00500			BEQ	RLF
00600			CMPI	15	;<cr>
00700			BEQ	RCR
00800			CMPI	13	;SCROLL UP
00900			BEQ	SCRLU
01000			CMPI	14	;SCROLL DOWN
01100			BEQ	SCRLD
01200			CMPI	22	;TOGGLE BRIGHTNESS
01300			BEQ	BRIGHT
01400			CMPI	20	;RIGHT
01500			BEQ	RIGHT
01600			CMPI	21	;SET AT LEFT
01700			BEQ	LEFT
01800			CMPI	7	;ERROR
01900			BEQ	JRTRN
02000			CMPI	27	;HOME
02100			BEQ	RHOME
02200			JMP	PCHR	;PRINT IT ANYWAY
02300		RHOME:	JSR	HOME
02400		JRTRN:	JMP	RSRTRN	;SET UPDATE FLAG
02500	; <lf>
02600		RLF:	JSR	LF	;<lf>
02700			JMP	SETFLG	;UPDATE SCREEN
02800	; <cr>
02900		RCR:	JSR	CKERA	;ERASE OLD CURSOR
03000			JSR	CR
03100			JMP	CKCUR	;SHOW CURSOR IF ON SCREEN
03200	; SCROLL DOWN
03300		SCRLD:	LDAZ	WINDOW
03400			CLC
03500			ADCI	100	;FOR 64 CHRS
03600			STAZ	WINDOW
03700			BCC	SETFLG
03800			INCZ	WINDOW+1
03900			LDAZ	WINDOW+1
04000			CMPI	ED
04100			BNE	SETFLG
04200			LDAI	SD
04300			STAZ	WINDOW+1
04400		SETFLG:	JSR	CKVIS
04500			INCZ	UPFLG	;UPDATE SCREEN
04600			JMP	RSRTRN
     

00100	; SCROLL UP
00200		SCRLU:	LDAZ	WINDOW
00300			SEC
00400			SBCI	100	;64 CHRS PER LINE
00500			STAZ	WINDOW
00600			BCS	SETFLG
00700			DECZ	WINDOW+1
00800			LDAZ	WINDOW+1
00900			CMPI	SD-1
01000			BNE	SETFLG
01100			LDAI	ED-1
01200			STAZ	WINDOW+1
01300			JMP	SETFLG
01400	; BRIGHTNESS
01500		BRIGHT:	LDAZ	BRT
01600			ANDI	1
01700			EORI	1	;TOGGLE
01800			STAZ	BRT
01900			JMP	RSRTRN
02000	; SET WINDOW AT LEFT OF PAGE
02100		LEFT:	LDAZ	WINDOW
02200			ANDI	300
02300			STAZ	WINDOW
02400			LDAI	1	;1 FOR NO RIGHT SHIFT AND UPDATE SCREEN
02500			STAZ	UPFLG
02600			JMP	SETFLG
02700	; WINDOW RIGHT
02800		RIGHT:	LDAZ	UPFLG
02900			EORI	200	;TOGGLE RIGHT SHIFT BIT
03000			STAZ	UPFLG
03100			LDAI	SPEED
03200			STAZ	SHIFT
03300			JMP	RSRTRN
     

00100	; CK IF IN WINDOW
00200		CKVIS:	LDYI	377	;SET NO SHOW
00300			LDAZ	CUR	;GET DISTANCE
00400			SEC
00500			SBCZ	WINDOW
00600			STAZ	DIS
00700			LDAZ	CUR+1
00800			SBCZ	WINDOW+1
00900			BCS	CKEQ
01000			ADCI	4	;IF NEG, ADD BUF LEN
01100		CKEQ:	STAZ	DIS+1
01200			BNE	NOTVIS	;NO SHOW IF ≥ 256
01300			LDAZ	DIS
01400			ANDI	77
01500			CMPI	CPL	;NO SHOW IF ≥ 28
01600			BCS	NOTVIS
01700			STAZ	CURVIS
01800			LDAZ	DIS	;GET REBUF INDEX
01900			ANDI	300
02000			ROLA
02100			ROLA
02200			ROLA
02300			TAX
02400			LDAX	ROWTBL	;NLINES * 28
02500			ADCZ	CURVIS
02600			TAY
02700		NOTVIS:	STYZ	CURVIS
02800			RTS
02900	
03000		ROWTBL:	0
03100			CPL
03200			CPL*2
03300			CPL*3
03400	
03500		SHOCUR:	LDYZ	CURVIS
03600			BMI	NOSHO
03700			LDAY	REBUF0	;OR CURSOR INTO CHR
03800			EORI	100
03900			STAY	REBUF0
04000			LDAY	REBUF1
04100			EORI	100
04200			STAY	REBUF1
04300			LDAY	REBUF2
04400			EORI	100
04500			STAY	REBUF2
04600			LDAY	REBUF3
04700			EORI	100
04800			STAY	REBUF3
04900			LDAY	REBUF4
05000			EORI	100
05100			STAY	REBUF4
05200		NOSHO:	RTS
     

00100	; HOME CURSOR?
00200		HOME:	LDAI	0	;CURSOR ← WINDOW ← TOP
00300			STAZ	CUR
00400			STAZ	WINDOW
00500			STAZ	CURVIS
00600			LDAI	SD
00700			STAZ	CUR+1
00800			STAZ	WINDOW+1
00900			STAZ	UPFLG	;SET UPDATE FLAG
01000			RTS
01100	; <lf> SUBROUTINE
01200		LF:	LDAZ	CUR
01300			CLC
01400			ADCI	100	;CUR ← CUR + 64
01500			STAZ	CUR
01600			BCC	CTEOL
01700			INCZ	CUR+1
01800			LDAZ	CUR+1
01900			CMPI	ED
02000			BNE	CTEOL
02100			LDAI	SD	;WRAP AROUND
02200			STAZ	CUR+1
02300	; CLEAR TO END OF LINE.
02400		CTEOL:	LDAZ	CUR	
02500			ANDI	77
02600			EORI	77
02700			TAY		;Y ← # CHRS LEFT ON LINE
02800			LDAI	40	;<space>
02900		CLRL:	STAIY	CUR	;FILL CURSOR TO CURSOR + CPL
03000			DEY		;WITH SPACES
03100			BPL	CLRL
03200			RTS
03300	; <cr> SUBROUTINE
03400		CR:	LDAZ	CUR	;CUR ← CUR ∧ ¬77
03500			ANDI	300
03600			STAZ	CUR
03700			RTS
     

00100	; ASCII TABLE	BITS     7    6   5  4  3   2   1   0
00200	;	LOC	176000	CNTL SHFT S2 S1 S0 RL2 RL1 RL0
00300		LOC	176000
00400	CHRTBL:	
00500		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7  ;CONTROL
00600		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
00700		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
00800		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
00900		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01000		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01100		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01200		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01300	
01400		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7  ;CNTL SHFT
01500		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01600		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01700		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01800		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
01900		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
02000		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
02100		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
02200	
02300		13   ↔	14   ↔	","  ↔	"."  ↔	"("  ↔  ")"  ↔	 7   ↔   7  ;SHIFT
02400		20   ↔  21   ↔  "'"  ↔	42   ↔	"["  ↔  "]"  ↔	 7   ↔   7
02500		22   ↔	23   ↔	";"  ↔  ":"  ↔  "/"  ↔  "\"  ↔   7   ↔   7
02600		24   ↔	25   ↔	"!"  ↔	"?"  ↔	"*"  ↔	"#"  ↔	 7   ↔	 7
02700		26   ↔	27   ↔	"+"  ↔	"-"  ↔	"%"  ↔	"="  ↔	 7   ↔	 7
02800		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
02900		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
03000		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
03100	
03200		"0"  ↔	"5"  ↔	"A"  ↔	"F"  ↔	"K"  ↔	"P"  ↔	"U"  ↔	 7
03300		"1"  ↔	"6"  ↔	"B"  ↔	"G"  ↔	"L"  ↔	"Q"  ↔	"V"  ↔	"Z"
03400		"2"  ↔	"7"  ↔	"C"  ↔	"H"  ↔	"M"  ↔	"R"  ↔	"W"  ↔	177
03500		"3"  ↔	"8"  ↔	"D"  ↔	"I"  ↔	"N"  ↔	"S"  ↔	"X"  ↔	" "
03600		"4"  ↔	"9"  ↔	"E"  ↔	"J"  ↔	"O"  ↔	"T"  ↔	"Y"  ↔	15
03700		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
03800		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
03900		 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7   ↔	 7
     

00100	;CHR GEN		⊗ = GRAPHICS
00200	;	0	1	2	3	4	5	6	7
00300	;  0/	 	⊗	⊗	⊗	⊗	⊗	⊗	 
00400	; 10/	 	 					 	⊗
00500	; 20/								
00600	; 30/	⊗	⊗	⊗	⊗	⊗	⊗	⊗	⊗
00700	; 40/	 	!	"	#	$	%	&	'
00800	; 50/	(	)	*	+	,	-	.	/
00900	; 60/	0	1	2	3	4	5	6	7
01000	; 70/	8	9	:	;	<	=	>	?
01100	;100/	@	A	B	C	D	E	F	G
01200	;110/	H	I	J	K	L	M	N	O
01300	;120/	P	Q	R	S	T	U	V	W
01400	;130/	X	Y	Z	[	\	]	↑	←
01500	;140/	 	a	b	c	d	e	f	g
01600	;150/	h	i	j	k	l	m	n	o
01700	;160/	p	q	r	s	t	u	v	w
01800	;170/	x	y	z	{	|	 	}	
01900	
02000		LOC 176400	;LOC 176400
02100	
02200	CGEN0:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
02300		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
02400		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
02500		010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
02600		000 ↔ 157 ↔ 003 ↔ 024 ↔ 056 ↔ 043 ↔ 060 ↔ 003
02700		034 ↔ 101 ↔ 044 ↔ 010 ↔ 100 ↔ 010 ↔ 140 ↔ 040
02800		076 ↔ 102 ↔ 102 ↔ 042 ↔ 010 ↔ 057 ↔ 060 ↔ 101
02900		066 ↔ 106 ↔ 146 ↔ 114 ↔ 010 ↔ 024 ↔ 101 ↔ 002
03000		164 ↔ 176 ↔ 177 ↔ 076 ↔ 177 ↔ 177 ↔ 177 ↔ 076
03100		177 ↔ 101 ↔ 040 ↔ 177 ↔ 177 ↔ 177 ↔ 177 ↔ 076
03200		177 ↔ 076 ↔ 177 ↔ 046 ↔ 001 ↔ 077 ↔ 037 ↔ 177
03300		143 ↔ 003 ↔ 141 ↔ 177 ↔ 002 ↔ 101 ↔ 004 ↔ 010
03400		000 ↔ 044 ↔ 177 ↔ 070 ↔ 060 ↔ 070 ↔ 010 ↔ 046
03500		177 ↔ 172 ↔ 040 ↔ 177 ↔ 101 ↔ 174 ↔ 174 ↔ 070
03600		177 ↔ 006 ↔ 174 ↔ 110 ↔ 004 ↔ 074 ↔ 034 ↔ 074
03700		104 ↔ 047 ↔ 104 ↔ 010 ↔ 177 ↔ 000 ↔ 101 ↔ 000
03800	
03900	CGEN1:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
04000		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
04100		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
04200		010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
04300		000 ↔ 157 ↔ 000 ↔ 177 ↔ 111 ↔ 023 ↔ 116 ↔ 000
04400		042 ↔ 042 ↔ 030 ↔ 010 ↔ 040 ↔ 010 ↔ 140 ↔ 020
04500		121 ↔ 177 ↔ 141 ↔ 101 ↔ 014 ↔ 111 ↔ 110 ↔ 041
04600		111 ↔ 051 ↔ 146 ↔ 054 ↔ 024 ↔ 024 ↔ 042 ↔ 001
04700		124 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
04800		010 ↔ 177 ↔ 100 ↔ 010 ↔ 100 ↔ 002 ↔ 004 ↔ 101
04900		011 ↔ 101 ↔ 011 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
05000		024 ↔ 004 ↔ 121 ↔ 101 ↔ 004 ↔ 101 ↔ 002 ↔ 034
05100		000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 176 ↔ 111
05200		010 ↔ 000 ↔ 100 ↔ 040 ↔ 177 ↔ 004 ↔ 010 ↔ 104
05300		006 ↔ 011 ↔ 010 ↔ 124 ↔ 004 ↔ 100 ↔ 040 ↔ 100
05400		050 ↔ 110 ↔ 144 ↔ 066 ↔ 000 ↔ 000 ↔ 101 ↔ 000
     

00100	CGEN2:	000 ↔ 017 ↔ 177 ↔ 170 ↔ 010 ↔ 010 ↔ 010 ↔ 000
00200		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 170
00300		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 052 ↔ 000 ↔ 000
00400		170 ↔ 017 ↔ 017 ↔ 170 ↔ 017 ↔ 177 ↔ 177 ↔ 177
00500		000 ↔ 000 ↔ 003 ↔ 024 ↔ 177 ↔ 010 ↔ 121 ↔ 000
00600		101 ↔ 034 ↔ 030 ↔ 076 ↔ 000 ↔ 010 ↔ 000 ↔ 010
00700		111 ↔ 100 ↔ 121 ↔ 101 ↔ 012 ↔ 111 ↔ 114 ↔ 021
00800		111 ↔ 031 ↔ 000 ↔ 000 ↔ 042 ↔ 024 ↔ 024 ↔ 121
00900		164 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
01000		010 ↔ 101 ↔ 100 ↔ 024 ↔ 100 ↔ 004 ↔ 010 ↔ 101
01100		011 ↔ 121 ↔ 031 ↔ 111 ↔ 177 ↔ 100 ↔ 100 ↔ 020
01200		010 ↔ 170 ↔ 111 ↔ 101 ↔ 010 ↔ 177 ↔ 177 ↔ 052
01300		000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 111
01400		010 ↔ 000 ↔ 100 ↔ 020 ↔ 100 ↔ 170 ↔ 004 ↔ 104
01500		011 ↔ 011 ↔ 004 ↔ 124 ↔ 077 ↔ 100 ↔ 100 ↔ 074
01600		020 ↔ 110 ↔ 124 ↔ 101 ↔ 000 ↔ 000 ↔ 076 ↔ 000
01700	
01800	CGEN3:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
01900		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
02000		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
02100		000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
02200		000 ↔ 000 ↔ 000 ↔ 177 ↔ 111 ↔ 144 ↔ 046 ↔ 000
02300		000 ↔ 000 ↔ 044 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 004
02400		105 ↔ 000 ↔ 111 ↔ 111 ↔ 177 ↔ 111 ↔ 112 ↔ 011
02500		111 ↔ 011 ↔ 000 ↔ 000 ↔ 101 ↔ 024 ↔ 010 ↔ 011
02600		104 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 111
02700		010 ↔ 000 ↔ 100 ↔ 042 ↔ 100 ↔ 002 ↔ 020 ↔ 101
02800		011 ↔ 041 ↔ 051 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
02900		024 ↔ 004 ↔ 105 ↔ 000 ↔ 020 ↔ 000 ↔ 002 ↔ 010
03000		000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 106
03100		010 ↔ 000 ↔ 075 ↔ 050 ↔ 000 ↔ 004 ↔ 004 ↔ 104
03200		011 ↔ 006 ↔ 004 ↔ 124 ↔ 104 ↔ 100 ↔ 040 ↔ 100
03300		050 ↔ 104 ↔ 114 ↔ 101 ↔ 000 ↔ 000 ↔ 010 ↔ 000
03400	
03500	CGEN4:	000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
03600		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
03700		000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
03800		000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
03900		000 ↔ 000 ↔ 000 ↔ 024 ↔ 062 ↔ 142 ↔ 100 ↔ 000
04000		000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 002
04100		076 ↔ 000 ↔ 106 ↔ 066 ↔ 010 ↔ 061 ↔ 061 ↔ 007
04200		066 ↔ 006 ↔ 000 ↔ 000 ↔ 000 ↔ 024 ↔ 000 ↔ 006
04300		174 ↔ 176 ↔ 066 ↔ 042 ↔ 076 ↔ 101 ↔ 001 ↔ 072
04400		177 ↔ 000 ↔ 077 ↔ 101 ↔ 100 ↔ 177 ↔ 177 ↔ 076
04500		006 ↔ 136 ↔ 106 ↔ 062 ↔ 001 ↔ 077 ↔ 037 ↔ 177
04600		143 ↔ 003 ↔ 103 ↔ 000 ↔ 040 ↔ 000 ↔ 004 ↔ 010
04700		000 ↔ 170 ↔ 060 ↔ 104 ↔ 177 ↔ 130 ↔ 002 ↔ 077
04800		160 ↔ 000 ↔ 000 ↔ 104 ↔ 000 ↔ 170 ↔ 170 ↔ 070
04900		006 ↔ 177 ↔ 010 ↔ 044 ↔ 104 ↔ 074 ↔ 034 ↔ 074
05000		104 ↔ 077 ↔ 104 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
05100	
05200	; INTER VECTS
05300		LOC 177772	;LOC 177772
05400		NMIV:	KBINT∧377	;NMIV:	ABSO KBINT
05500			371
05600		RSTV:	0		;RSTV:	ABSO RSTA
05700			370
05800		IRQV:	RSINT∧377	;IRQV:	ABSO RSINT
05900			371
06000		END